package com.example.controller;

import com.example.log.Log;
import com.example.pojo.Dept;
import com.example.pojo.Result;
import com.example.service.DeptService;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Delete;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * DeptController 类的描述信息
 *
 * @author 12427
 * @since 2025/6/3 10:08
 */
@Slf4j//注解设置日志
@RequestMapping("/depts")//总设置路径
@RestController//
public class DeptController {
//    设置日志
//    private static final Logger log = LoggerFactory.getLogger(DeptController.class);
    @Autowired
    private DeptService deptService;
//    method = RequestMethod.GET设置请求为get
//    @RequestMapping(value = "/depts",method = RequestMethod.GET)
//    一样的意思
    @GetMapping
    public Result list(){
        log.warn("查询部门");
       List<Dept> deptList= deptService.findAll();
       return Result.success(deptList);
    }
//    @RestController("/depts?id={id}")
    /**  第一种
     *  删除部门
     *  根据 http请求删除
     * */
//    @DeleteMapping("/depts")
//    public Result delete(HttpServletRequest request){
//        String idStr = request.getParameter("id");
//        int id =  Integer.parseInt(idStr);
//        System.out.println("根据id删除部门"+id);
//        return Result.success() ;
//    }
    /**  第二种
     * 删除部门
     *  spring提供的  @RequestParam("")
     *  声明了 参数一定要传递 否则报错 因为 boolean required() default true;
     *  默认为true
     *  也可以在后面更改
     * */
//    @DeleteMapping("/depts")
//    public Result delete(@RequestParam("id")Integer id){// @RequestParam 的作用是确保参数名与前端保持一致
//        System.out.println("根据id删除部门"+id);
//        return Result.success() ;
//    }
    /** 第三种
     *  前端传递的请求 参数和服务端的形参一致
     * */
    @Log//设置是切面
    @DeleteMapping
    public Result delete(Integer id){
        log.warn("根据id删除部门"+id);
        deptService.deletrById(id);
        return Result.success() ;
    }
    /**
     *   添加部门
     * */
    @Log
    @PostMapping
    public Result add(@RequestBody Dept dept){//@RequestBody直接封装到对象中（前端接受的是json格式）
        log.warn("添加了"+dept);
        deptService.add(dept);
        return Result.success();
    }
    /**
     *  根据ID查询用户
     *   查询回显
     * */
    @GetMapping("{id}")//@PathVariable 接受路径参数
    public Result findId(@PathVariable("id") Integer id){
        Dept dept = deptService.findid(id);
        System.out.println(id);
        return Result.success(dept);
    }
    /**
     *  修改用户
     * */
    @Log
    @PutMapping
    public Result update(@RequestBody Dept dept){
        log.warn("修改了"+dept);
        deptService.update(dept);
        return Result.success();
    }
}
